﻿#ifndef __CONFIG_DIALOG_HPP__
#define __CONFIG_DIALOG_HPP__

#include "FL/Fl.H"
#include "FL/Fl_Window.H"
#include "FL/Fl_Group.H"
#include "FL/Fl_Radio_Round_Button.H"
#include "FL/Fl_Check_Button.H"
#include "FL/Fl_Float_Input.H"
#include "FL/Fl_Return_Button.H"




/**
 *
 */
class ConfigDialog : Fl_Window
{
    struct Result {
        bool  export_scene_enabled;
        bool  export_ambient_enabled;
        bool  export_directional_enabled;
        bool  export_camera_enabled;
        bool  export_model_enabled;
        bool  file_compress_enabled;
        bool  file_log_enabled;
        float scene_scale;
        float scene_near;
        float scene_far;
        bool  accepted;
    };

public:
    ConfigDialog ();
    virtual ~ConfigDialog ();

    bool run ();

    bool  getAccepted () const;
    bool  getExportSceneEnalbed () const;
    bool  getExportAmbientLightEnabled () const;
    bool  getExportDirectionalLightEnalbed () const;
    bool  getExportCameraEnalbed () const;
    bool  getExportModelEnalbed () const;
    bool  getFileCompressEnabled () const;
    bool  getFileLogEnabled () const;
    float getSceneScaleFactor () const;
    float getSceneClippingNear () const;
    float getSceneClippingFar () const;

private:
    static void onCallbackWindow       (Fl_Widget* w, void* v);
    static void onCallbackExportScene  (Fl_Widget* w, void* v);
    static void onCallbackExportModel  (Fl_Widget* w, void* v);
    static void onCallbackAcceptOK     (Fl_Widget* w, void* v);
    static void onCallbackAcceptCancel (Fl_Widget* w, void* v);

private:
    Fl_Group*              grp_export;             ///< Exportグループ
    Fl_Radio_Round_Button* btn_export_scene;       ///< シーン全体の出力
    Fl_Radio_Round_Button* btn_export_model;       ///< モデル単体の出力
    Fl_Check_Button*       btn_export_ambient;     ///< 環境光の出力
    Fl_Check_Button*       btn_export_directional; ///< 平行光源の出力
    Fl_Check_Button*       btn_export_camera;      ///< カメラの出力

    Fl_Group*        grp_file;           ///< Fileグループ
    Fl_Check_Button* btn_file_compress;  ///< 圧縮あり
    Fl_Check_Button* btn_file_log;       ///< ログの出力

    Fl_Group*       grp_scene;           ///< Sceneグループ
    Fl_Float_Input* inp_scene_scale;     ///< スケール定数
    Fl_Float_Input* inp_scene_near;      ///< ニア定数
    Fl_Float_Input* inp_scene_far;      ///< ファー定数

    Fl_Group*         grp_accept;  ///< Acceptグループ
    Fl_Return_Button* btn_accept_ok; ///< OKボタン
    Fl_Button*        btn_accept_cancel; ///< Cancelボタン

    Result result;
};


#endif

